# SOME DESCRIPTIVE TITLE
# Copyright (C) YEAR The FreeBSD Project
# This file is distributed under the same license as the FreeBSD Documentation package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
"POT-Creation-Date: 2022-09-09 20:51-0300\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"

#. type: Title =
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:13
#, no-wrap
msgid "Advanced pkg-plist Practices"
msgstr ""

#. type: YAML Front Matter: title
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:1
#, no-wrap
msgid "Chapter 8. Advanced pkg-plist Practices"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:51
#, no-wrap
msgid "Changing pkg-plist Based on Make Variables"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:58
msgid ""
"Some ports, particularly the `p5-` ports, need to change their [."
"filename]#pkg-plist# depending on what options they are configured with (or "
"version of `perl`, in the case of `p5-` ports).  To make this easy, any "
"instances in [.filename]#pkg-plist# of `%%OSREL%%`, `%%PERL_VER%%`, and `%"
"%PERL_VERSION%%` will be substituted appropriately.  The value of `%%OSREL%"
"%` is the numeric revision of the operating system (for example, `4.9`).  `%"
"%PERL_VERSION%%` and `%%PERL_VER%%` is the full version number of `perl` "
"(for example, `5.8.9`).  Several other `%%_VARS_%%` related to port's "
"documentation files are described in crossref:makefiles[install-"
"documentation,the relevant section]."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:60
msgid ""
"To make other substitutions, set `PLIST_SUB` with a list of `_VAR=VALUE_` "
"pairs and instances of `%%_VAR_%%` will be substituted with _VALUE_ in [."
"filename]#pkg-plist#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:63
msgid ""
"For instance, if a port installs many files in a version-specific "
"subdirectory, use a placeholder for the version so that [.filename]#pkg-"
"plist# does not have to be regenerated every time the port is updated.  For "
"example, set:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:68
#, no-wrap
msgid ""
"OCTAVE_VERSION=\t${PORTREVISION}\n"
"PLIST_SUB=\tOCTAVE_VERSION=${OCTAVE_VERSION}\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:72
msgid ""
"in the [.filename]#Makefile# and use `%%OCTAVE_VERSION%%` wherever the "
"version shows up in [.filename]#pkg-plist#.  When the port is upgraded, it "
"will not be necessary to edit dozens (or in some cases, hundreds) of lines "
"in [.filename]#pkg-plist#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:75
msgid ""
"If files are installed conditionally on the options set in the port, the "
"usual way of handling it is prefixing [.filename]#pkg-plist# lines with a `%"
"%OPT%%` for lines needed when the option is enabled, or `%%NO_OPT%%` when "
"the option is disabled, and adding `OPTIONS_SUB=yes` to the [."
"filename]#Makefile#.  See crossref:makefiles[options_sub,`OPTIONS_SUB`] for "
"more information."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:77
msgid ""
"For instance, if there are files that are only installed when the `X11` "
"option is enabled, and [.filename]#Makefile# has:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:82
#, no-wrap
msgid ""
"OPTIONS_DEFINE=\tX11\n"
"OPTIONS_SUB=\tyes\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:85
msgid ""
"In [.filename]#pkg-plist#, put `%%X11%%` in front of the lines only being "
"installed when the option is enabled, like this :"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:89
#, no-wrap
msgid "%%X11%%bin/foo-gui\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:94
msgid ""
"This substitution will be done between the `pre-install` and `do-install` "
"targets, by reading from [.filename]#PLIST# and writing to [."
"filename]#TMPPLIST# (default: [.filename]#WRKDIR/.PLIST.mktmp#).  So if the "
"port builds [.filename]#PLIST# on the fly, do so in or before `pre-"
"install`.  Also, if the port needs to edit the resulting file, do so in "
"`post-install` to a file named [.filename]#TMPPLIST#."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:100
msgid ""
"Another way of modifying a port's packing list is based on setting the "
"variables `PLIST_FILES` and `PLIST_DIRS`.  The value of each variable is "
"regarded as a list of pathnames to write to [.filename]#TMPPLIST# along with "
"[.filename]#PLIST# contents.  While names listed in `PLIST_FILES` and "
"`PLIST_DIRS` are subject to `%%_VAR_%%` substitution as described above, it "
"is better to use the `${_VAR_}` directly.  Except for that, names from "
"`PLIST_FILES` will appear in the final packing list unchanged, while `@dir` "
"will be prepended to names from `PLIST_DIRS`.  To take effect, `PLIST_FILES` "
"and `PLIST_DIRS` must be set before [.filename]#TMPPLIST# is written, that "
"is, in `pre-install` or earlier."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:104
msgid ""
"From time to time, using `OPTIONS_SUB` is not enough.  In those cases, "
"adding a specific `_TAG_` to `PLIST_SUB` inside the [.filename]#Makefile# "
"with a special value of `@comment`, makes package tools to ignore the line.  "
"For instance, if some files are only installed when the `X11` option is on "
"and the architecture is `i386`:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:108
#, no-wrap
msgid ".include <bsd.port.pre.mk>\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:114
#, no-wrap
msgid ""
".if ${PORT_OPTIONS:MX11} && ${ARCH} == \"i386\"\n"
"PLIST_SUB+=\tX11I386=\"\"\n"
".else\n"
"PLIST_SUB+=\tX11I386=\"@comment \"\n"
".endif\n"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:117
#, no-wrap
msgid "Empty Directories"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:120
#, no-wrap
msgid "Cleaning Up Empty Directories"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:126
msgid ""
"When being de-installed, a port has to remove empty directories it created.  "
"Most of these directories are removed automatically by man:pkg[8], but for "
"directories created outside of [.filename]#${PREFIX}#, or empty directories, "
"some more work needs to be done.  This is usually accomplished by adding "
"`@dir` lines for those directories.  Subdirectories must be deleted before "
"deleting parent directories."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:132
#, no-wrap
msgid ""
"[...]\n"
"@dir /var/games/oneko/saved-games\n"
"@dir /var/games/oneko\n"
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:135
#, no-wrap
msgid "Creating Empty Directories"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:140
msgid ""
"Empty directories created during port installation need special attention.  "
"They must be present when the package is created.  If they are not created "
"by the port code, create them in the [.filename]#Makefile#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:145
#, no-wrap
msgid ""
"post-install:\n"
"\t${MKDIR} ${STAGEDIR}${PREFIX}/some/directory\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:149
msgid ""
"Add the directory to [.filename]#pkg-plist# like any other.  For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:153
#, no-wrap
msgid "@dir some/directory\n"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:156
#, no-wrap
msgid "Configuration Files"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:160
msgid ""
"If the port installs configuration files to [.filename]#PREFIX/etc# (or "
"elsewhere) do _not_ list them in [.filename]#pkg-plist#.  That will cause "
"`pkg delete` to remove files that have been carefully edited by the user, "
"and a re-installation will wipe them out."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:164
msgid ""
"Instead, install sample files with a [.filename]#filename.sample# "
"extension.  The `@sample` macro automates this, see <<plist-keywords-"
"sample>> for what it does exactly.  For each sample file, add a line to [."
"filename]#pkg-plist#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:168
#, no-wrap
msgid "@sample etc/orbit.conf.sample\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:172
msgid ""
"If there is a very good reason not to install a working configuration file "
"by default, only list the sample filename in [.filename]#pkg-plist#, without "
"the `@sample` followed by a space part, and add a crossref:pkg-files[porting-"
"message,message] pointing out that the user must copy and edit the file "
"before the software will work."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:177
msgid ""
"When a port installs its configuration in a subdirectory of [.filename]#"
"${PREFIX}/etc#, use `ETCDIR`, which defaults to `${PREFIX}/etc/${PORTNAME}`, "
"it can be overridden in the ports [.filename]#Makefile# if there is a "
"convention for the port to use some other directory.  The `%%ETCDIR%%` macro "
"will be used in its stead in [.filename]#pkg-plist#."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:183
msgid ""
"The sample configuration files should always have the [.filename]#.sample# "
"suffix.  If for some historical reason using the standard suffix is not "
"possible, or if the sample files come from some other directory, use this "
"construct:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:187
#, no-wrap
msgid "@sample etc/orbit.conf-dist etc/orbit.conf\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:190
msgid "or"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:194
#, no-wrap
msgid "@sample %%EXAMPLESDIR%%/orbit.conf etc/orbit.conf\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:197
msgid "The format is `@sample _sample-file actual-config-file_`."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:200
#, no-wrap
msgid "Dynamic Versus Static Package List"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:204
msgid ""
"A _static package list_ is a package list which is available in the Ports "
"Collection either as [.filename]#pkg-plist# (with or without variable "
"substitution), or embedded into the [.filename]#Makefile# via `PLIST_FILES` "
"and `PLIST_DIRS`.  Even if the contents are auto-generated by a tool or a "
"target in the Makefile _before_ the inclusion into the Ports Collection by a "
"committer (for example, using `make makeplist`), this is still considered a "
"static list, since it is possible to examine it without having to download "
"or compile the distfile."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:207
msgid ""
"A _dynamic package list_ is a package list which is generated at the time "
"the port is compiled based upon the files and directories which are "
"installed.  It is not possible to examine it before the source code of the "
"ported application is downloaded and compiled, or after running a `make "
"clean`."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:211
msgid ""
"While the use of dynamic package lists is not forbidden, maintainers should "
"use static package lists wherever possible, as it enables users to man:"
"grep[1] through available ports to discover, for example, which port "
"installs a certain file.  Dynamic lists should be primarily used for complex "
"ports where the package list changes drastically based upon optional "
"features of the port (and thus maintaining a static package list is "
"infeasible), or ports which change the package list based upon the version "
"of dependent software used.  For example, ports which generate docs with "
"Javadoc."
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:213
#, no-wrap
msgid "Automated Package List Creation"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:218
msgid ""
"First, make sure the port is almost complete, with only [.filename]#pkg-"
"plist# missing.  Running `make makeplist` will show an example for [."
"filename]#pkg-plist#.  The output of `makeplist` must be double checked for "
"correctness as it tries to automatically guess a few things, and can get it "
"wrong."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:222
msgid ""
"User configuration files should be installed as [.filename]#filename."
"sample#, as it is described in <<plist-config>>.  [.filename]#info/dir# must "
"not be listed and appropriate [.filename]#install-info# lines must be added "
"as noted in the crossref:makefiles[makefile-info,info files] section.  Any "
"libraries installed by the port must be listed as specified in the crossref:"
"special[porting-shlibs,shared libraries] section."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:224
#, no-wrap
msgid "Expanding `PLIST_SUB` with Regular Expressions"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:228
msgid ""
"Strings to be replaced sometimes need to be very specific to avoid undesired "
"replacements.  This is a common problem with shorter values."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:230
msgid ""
"To address this problem, for each `_PLACEHOLDER_=_value_`, a "
"`PLACEHOLDER_regex=regex` can be set, with the `_regex_` part matching "
"_value_ more precisely."
msgstr ""

#. type: Block title
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:232
#, no-wrap
msgid "Using PLIST_SUB with Regular Expressions"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:240
msgid ""
"Perl ports can install architecture dependent files in a specific tree.  On "
"FreeBSD to ease porting, this tree is called `mach`.  For example, a port "
"that installs a file whose path contains `mach` could have that part of the "
"path string replaced with the wrong values.  Consider this [."
"filename]#Makefile#:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:248
#, no-wrap
msgid ""
"PORTNAME=\tMachine-Build\n"
"DISTVERSION=\t1\n"
"CATEGORIES=\tdevel perl5\n"
"MASTER_SITES=\tCPAN\n"
"PKGNAMEPREFIX=\tp5-\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:252
#, no-wrap
msgid ""
"MAINTAINER=\tperl@FreeBSD.org\n"
"COMMENT=\tBuilding machine\n"
"WWW=\t\thttps://search.cpan.org/dist/Machine-Build\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:255
#, no-wrap
msgid ""
"USES=\t\tperl5\n"
"USE_PERL5=\tconfigure\n"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:257
#, no-wrap
msgid "PLIST_SUB=\tPERL_ARCH=mach\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:260
msgid "The files installed by the port are:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:268
#, no-wrap
msgid ""
"/usr/local/bin/machine-build\n"
"/usr/local/lib/perl5/site_perl/man/man1/machine-build.1.gz\n"
"/usr/local/lib/perl5/site_perl/man/man3/Machine::Build.3.gz\n"
"/usr/local/lib/perl5/site_perl/Machine/Build.pm\n"
"/usr/local/lib/perl5/site_perl/mach/5.20/Machine/Build/Build.so\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:271
msgid "Running `make makeplist` wrongly generates:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:279
#, no-wrap
msgid ""
"bin/%%PERL_ARCH%%ine-build\n"
"%%PERL5_MAN1%%/%%PERL_ARCH%%ine-build.1.gz\n"
"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
"%%SITE_PERL%%/Machine/Build.pm\n"
"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:282
msgid "Change the `PLIST_SUB` line from the [.filename]#Makefile# to:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:287
#, no-wrap
msgid ""
"PLIST_SUB=\tPERL_ARCH=mach \\\n"
"\t\tPERL_ARCH_regex=\\bmach\\b\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:290
msgid "Now `make makeplist` correctly generates:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:298
#, no-wrap
msgid ""
"bin/machine-build\n"
"%%PERL5_MAN1%%/machine-build.1.gz\n"
"%%PERL5_MAN3%%/Machine::Build.3.gz\n"
"%%SITE_PERL%%/Machine/Build.pm\n"
"%%SITE_PERL%%/%%PERL_ARCH%%/%%PERL_VER%%/Machine/Build/Build.so\n"
msgstr ""

#. type: Title ==
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:303
#, no-wrap
msgid "Expanding Package List with Keywords"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:309
msgid ""
"All keywords can also take optional arguments in parentheses.  The arguments "
"are owner, group, and mode.  This argument is used on the file or directory "
"referenced.  To change the owner, group, and mode of a configuration file, "
"use:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:313
#, no-wrap
msgid "@sample(games,games,640) etc/config.sample\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:317
msgid ""
"The arguments are optional.  If only the group and mode need to be changed, "
"use:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:321
#, no-wrap
msgid "@sample(,games,660) etc/config.sample\n"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:327
msgid ""
"If a keyword is used on an crossref:makefiles[makefile-options,optional] "
"entry, it must to be added after the helper:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:331
#, no-wrap
msgid "%%FOO%%@sample etc/orbit.conf.sample\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:335
msgid ""
"This is because the options plist helpers are used to comment out the line, "
"so they need to be put first.  See crossref:makefiles[options_sub,"
"`OPTIONS_SUB`] for more information."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:338
#, no-wrap
msgid "`@desktop-file-utils`"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:342
msgid ""
"Will run `update-desktop-database -q` after installation and "
"deinstallation.  _Never_ use directly, add crossref:uses[uses-desktop-file-"
"utils,`USES=desktop-file-utils`] to the [.filename]#Makefile#."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:344
#, no-wrap
msgid "`@fc` _directory_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:347
msgid ""
"Add a `@dir` entry for the directory passed as an argument, and run `fc-"
"cache -fs` on that directory after installation and deinstallation."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:349
#, no-wrap
msgid "`@fontsdir` _directory_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:353
msgid ""
"Add a `@dir` entry for the directory passed as an argument, and run "
"`mkfontscale` and `mkfontdir` on that directory after installation and "
"deinstallation.  Additionally, on deinstallation, it removes the [."
"filename]#fonts.scale# and [.filename]#fonts.dir# cache files if they are "
"empty."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:355
#, no-wrap
msgid "`@info` _file_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:361
msgid ""
"Add the file passed as argument to the plist, and updates the info document "
"index on installation and deinstallation.  Additionally, it removes the "
"index if empty on deinstallation.  This should never be used manually, but "
"always through `INFO`.  See crossref:makefiles[makefile-info,Info Files] for "
"more information."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:363
#, no-wrap
msgid "`@kld` _directory_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:367
msgid ""
"Runs `kldxref` on the directory on installation and deinstallation.  "
"Additionally, on deinstallation, it will remove the directory if empty."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:369
#, no-wrap
msgid "`@rmtry` _file_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:372
msgid ""
"Will remove the file on deinstallation, and not give an error if the file is "
"not there."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:374
#, no-wrap
msgid "`@sample` _file_ [_file_]"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:378
msgid ""
"This is used to handle installation of configuration files, through example "
"files bundled with the package.  The \"actual\", non-sample, file is either "
"the second filename, if present, or the first filename without the [."
"filename]#.sample# extension."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:383
msgid ""
"This does three things. First, add the first file passed as argument, the "
"sample file, to the plist.  Then, on installation, if the actual file is not "
"found, copy the sample file to the actual file.  And finally, on "
"deinstallation, remove the actual file if it has not been modified.  See "
"<<plist-config>> for more information."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:385
#, no-wrap
msgid "`@shared-mime-info` _directory_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:388
msgid ""
"Runs `update-mime-database` on the directory on installation and "
"deinstallation."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:390
#, no-wrap
msgid "`@shell` _file_"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:393
msgid "Add the file passed as argument to the plist."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:396
msgid ""
"On installation, add the full path to _file_ to [.filename]#/etc/shells#, "
"while making sure it is not added twice.  On deinstallation, remove it from "
"[.filename]#/etc/shells#."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:398
#, no-wrap
msgid "`@terminfo`"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:402
msgid ""
"Do not use by itself.  If the port installs [.filename]#*.terminfo# files, "
"add crossref:uses[uses-terminfo,USES=terminfo] to its [.filename]#Makefile#."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:404
msgid ""
"On installation and deinstallation, if `tic` is present, refresh [.filename]#"
"${PREFIX}/shared/misc/terminfo.db# from the [.filename]#*.terminfo# files in "
"[.filename]#${PREFIX}/shared/misc#."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:406
#, no-wrap
msgid "Base Keywords"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:409
msgid ""
"There are a few keywords that are hardcoded, and documented in man:pkg-"
"create[8]. For the sake of completeness, they are also documented here."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:411
#, no-wrap
msgid "`@` [_file_]"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:415
msgid ""
"The empty keyword is a placeholder to use when the file's owner, group, or "
"mode need to be changed.  For example, to set the group of the file to "
"`games` and add the setgid bit, add:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:419
#, no-wrap
msgid "@(,games,2755) sbin/daemon\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:422
#, no-wrap
msgid "`@preexec` _command_, `@postexec` _command_, `@preunexec` _command_, `@postunexec` _command_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:425
msgid ""
"Execute _command_ as part of the package installation or deinstallation "
"process."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:426
#, no-wrap
msgid "`@preexec` _command_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:428
msgid "Execute _command_ as part of the [.filename]#pre-install# scripts."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:429
#, no-wrap
msgid "`@postexec` _command_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:431
msgid "Execute _command_ as part of the [.filename]#post-install# scripts."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:432
#, no-wrap
msgid "`@preunexec` _command_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:434
msgid "Execute _command_ as part of the [.filename]#pre-deinstall# scripts."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:435
#, no-wrap
msgid "`@postunexec` _command_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:437
msgid "Execute _command_ as part of the [.filename]#post-deinstall# scripts."
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:440
msgid ""
"If _command_ contains any of these sequences somewhere in it, they are "
"expanded inline.  For these examples, assume that `@cwd` is set to [."
"filename]#/usr/local# and the last extracted file was [.filename]#bin/emacs#."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:441
#, no-wrap
msgid "`%F`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:444
msgid ""
"Expand to the last filename extracted (as specified).  In the example case [."
"filename]#bin/emacs#."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:445
#, no-wrap
msgid "`%D`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:448
msgid ""
"Expand to the current directory prefix, as set with `@cwd`.  In the example "
"case [.filename]#/usr/local#."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:449
#, no-wrap
msgid "`%B`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:452
msgid ""
"Expand to the basename of the fully qualified filename, that is, the current "
"directory prefix plus the last filespec, minus the trailing filename.  In "
"the example case, that would be [.filename]#/usr/local/bin#."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:453
#, no-wrap
msgid "`%f`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:456
msgid ""
"Expand to the filename part of the fully qualified name, or the converse of `"
"%B`.  In the example case, [.filename]#emacs#."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:461
msgid ""
"These keywords are here to help you set up the package so that it is as "
"ready to use as possible.  They _must not_ be abused to start services, stop "
"services, or run any other commands that will modify the currently running "
"system."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:464
#, no-wrap
msgid "`@mode` _mode_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:469
msgid ""
"Set default permission for all subsequently extracted files to _mode_.  "
"Format is the same as that used by man:chmod[1].  Use without an arg to set "
"back to default permissions (mode of the file while being packed)."
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:474
msgid ""
"This must be a numeric mode, like `644`, `4755`, or `600`.  It cannot be a "
"relative mode like `u+s`."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:477
#, no-wrap
msgid "`@owner` _user_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:481
msgid ""
"Set default ownership for all subsequent files to _user_.  Use without an "
"argument to set back to default ownership (`root`)."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:483
#, no-wrap
msgid "`@group` _group_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:487
msgid ""
"Set default group ownership for all subsequent files to _group_.  Use "
"without an arg to set back to default group ownership (`wheel`)."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:489
#, no-wrap
msgid "`@comment` _string_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:492
msgid "This line is ignored when packing."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:494
#, no-wrap
msgid "`@dir` _directory_"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:500
msgid ""
"Declare directory name. By default, directories created under `PREFIX` by a "
"package installation are automatically removed.  Use this when an empty "
"directory under `PREFIX` needs to be created, or when the directory needs to "
"have non default owner, group, or mode.  Directories outside of `PREFIX` "
"need to be registered.  For example, [.filename]#/var/db/${PORTNAME}# needs "
"to have a `@dir` entry whereas [.filename]#${PREFIX}/shared/${PORTNAME}# "
"does not if it contains files or uses the default owner, group, and mode."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:502
#, no-wrap
msgid "`@exec` _command_, `@unexec` _command_ (Deprecated)"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:506
msgid ""
"Execute _command_ as part of the installation or deinstallation process.  "
"Please use <<plist-keywords-base-exec>> instead."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:508
#, no-wrap
msgid "`@dirrm` _directory_ (Deprecated)"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:512
msgid ""
"Declare directory name to be deleted at deinstall time.  By default, "
"directories created under `PREFIX` by a package installation are deleted "
"when the package is deinstalled."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:514
#, no-wrap
msgid "`@dirrmtry` _directory_ (Deprecated)"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:517
msgid ""
"Declare directory name to be removed, as for `@dirrm`, but does not issue a "
"warning if the directory cannot be removed."
msgstr ""

#. type: Title ===
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:519
#, no-wrap
msgid "Creating New Keywords"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:524
msgid ""
"Package list files can be extended by keywords that are defined in the [."
"filename]#${PORTSDIR}/Keywords# directory.  The settings for each keyword "
"are stored in a UCL file named [.filename]#keyword.ucl#.  The file must "
"contain at least one of these sections:"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:526
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:535
#, no-wrap
msgid "`attributes`"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:527
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:548
#, no-wrap
msgid "`action`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:528
msgid "`pre-install`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:529
msgid "`post-install`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:530
msgid "`pre-deinstall`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:531
msgid "`post-deinstall`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:532
msgid "`pre-upgrade`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:533
msgid "`post-upgrade`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:541
msgid ""
"Changes the owner, group, or mode used by the keyword.  Contains an "
"associative array where the possible keys are `owner`, `group`, and `mode`.  "
"The values are, respectively, a user name, a group name, and a file mode.  "
"For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:545
#, no-wrap
msgid "attributes: { owner: \"games\", group: \"games\", mode: 0555 }\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:551
msgid ""
"Defines what happens to the keyword's parameter. Contains an array where the "
"possible values are:"
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:552
#, no-wrap
msgid "`setprefix`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:554
msgid "Set the prefix for the next plist entries."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:555
#, no-wrap
msgid "`dir`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:557
msgid "Register a directory to be created on install and removed on deinstall."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:558
#, no-wrap
msgid "`dirrm`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:561
msgid "Register a directory to be deleted on deinstall.  Deprecated."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:562
#, no-wrap
msgid "`dirrmtry`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:565
msgid "Register a directory to try and deleted on deinstall.  Deprecated."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:566
#, no-wrap
msgid "`file`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:568
msgid "Register a file."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:569
#, no-wrap
msgid "`setmode`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:571
msgid "Set the mode for the next plist entries."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:572
#, no-wrap
msgid "`setowner`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:574
msgid "Set the owner for the next plist entries."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:575
#, no-wrap
msgid "`setgroup`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:577
msgid "Set the group for the next plist entries."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:578
#, no-wrap
msgid "`comment`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:580
msgid "Does not do anything, equivalent to not entering an `action` section."
msgstr ""

#. type: Labeled list
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:581
#, no-wrap
msgid "`ignore_next`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:583
msgid "Ignore the next entry in the plist."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:585
#, no-wrap
msgid "`arguments`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:589
msgid ""
"If set to `true`, adds argument handling, splitting the whole line, `%@`, "
"into numbered arguments, `%1`, `%2`, and so on.  For example, for this line:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:593
#, no-wrap
msgid "@foo some.content other.content\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:596
msgid "`%1` and `%2` will contain:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:601
#, no-wrap
msgid ""
"some.content\n"
"other.content\n"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:606
msgid ""
"It also affects how the <<plist-keywords-action,`action`>> entry works.  "
"When there is more than one argument, the argument number must be "
"specified.  For example:"
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:610
#, no-wrap
msgid "actions: [file(1)]\n"
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:613
#, no-wrap
msgid "`pre-install`, `post-install`, `pre-deinstall`, `post-deinstall`, `pre-upgrade`, `post-upgrade`"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:617
msgid ""
"These keywords contains a man:sh[1] script to be executed before or after "
"installation, deinstallation, or upgrade of the package.  In addition to the "
"usual `@exec %_foo_` placeholders described in <<plist-keywords-base-exec>>, "
"there is a new one, `%@`, which represents the argument of the keyword."
msgstr ""

#. type: Title ====
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:619
#, no-wrap
msgid "Custom Keyword Examples"
msgstr ""

#. type: Block title
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:622
#, no-wrap
msgid "Example of a `@dirrmtryecho` Keyword"
msgstr ""

#. type: delimited block = 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:627
msgid ""
"This keyword does two things, it adds a `@dirrmtry _directory_` line to the "
"packing list, and echoes the fact that the directory is removed when "
"deinstalling the package."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:634
#, no-wrap
msgid ""
"actions: [dirrmtry]\n"
"post-deinstall: <<EOD\n"
"  echo \"Directory %D/%@ removed.\"\n"
"EOD\n"
msgstr ""

#. type: Block title
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:639
#, no-wrap
msgid "Real Life Example, How `@sample` is Implemented"
msgstr ""

#. type: Plain text
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:645
msgid ""
"This keyword does three things.  It adds the first _filename_ passed as an "
"argument to `@sample` to the packing list, it adds to the `post-install` "
"script instructions to copy the sample to the actual configuration file if "
"it does not already exist, and it adds to the `post-deinstall` instructions "
"to remove the configuration file if it has not been modified."
msgstr ""

#. type: delimited block . 4
#: documentation/content/en/books/porters-handbook/plist/_index.adoc:690
#, no-wrap
msgid ""
"actions: [file(1)]\n"
"arguments: true\n"
"post-install: <<EOD\n"
"  case \"%1\" in\n"
"  /*) sample_file=\"%1\" ;;\n"
"  *) sample_file=\"%D/%1\" ;;\n"
"  esac\n"
"  target_file=\"${sample_file%.sample}\"\n"
"  set -- %@\n"
"  if [ $# -eq 2 ]; then\n"
"      target_file=${2}\n"
"  fi\n"
"  case \"${target_file}\" in\n"
"  /*) target_file=\"${target_file}\" ;;\n"
"  *) target_file=\"%D/${target_file}\" ;;\n"
"  esac\n"
"  if ! [ -f \"${target_file}\" ]; then\n"
"    /bin/cp -p \"${sample_file}\" \"${target_file}\" && \\\n"
"      /bin/chmod u+w \"${target_file}\"\n"
"  fi\n"
"EOD\n"
"pre-deinstall: <<EOD\n"
"  case \"%1\" in\n"
"  /*) sample_file=\"%1\" ;;\n"
"  *) sample_file=\"%D/%1\" ;;\n"
"  esac\n"
"  target_file=\"${sample_file%.sample}\"\n"
"  set -- %@\n"
"  if [ $# -eq 2 ]; then\n"
"      set -- %@\n"
"      target_file=${2}\n"
"  fi\n"
"  case \"${target_file}\" in\n"
"  /*) target_file=\"${target_file}\" ;;\n"
"  *) target_file=\"%D/${target_file}\" ;;\n"
"  esac\n"
"  if cmp -s \"${target_file}\" \"${sample_file}\"; then\n"
"    rm -f \"${target_file}\"\n"
"  else\n"
"    echo \"You may need to manually remove ${target_file} if it is no longer needed.\"\n"
"  fi\n"
"EOD\n"
msgstr ""
